<?php defined('SYSPATH') or die('No direct script access.');
/**
 * 重写并扩展 URL 类
 *
 * @author  Yellow.Chow <aultoale@gmail.com>
 * @version $Id: url.php 252 2012-06-13 07:20:18Z yellow.chow $
 * @license http://www.gnu.org/licenses/gpl-3.0.html    GPL 3
 */
class URL extends Kohana_URL
{

    /**
     * 读取资源地址 URL
     *
     * @return string
     */
    public static function resource($url = NULL)
    {
        return Config::get('site.resource').ltrim($url, '/');
    }

    /**
     * 生成图片地址
     *
     * @param  string  $image   当图片地址为 image_md5 格式时，自动生成路径
     * @param  int     $width   指定宽度则会生成缩略图地址
     * @param  int     $prefix  地址前缀
     * @param  bool    $http    是否添加 http:// 地址
     * @return string
     */
    public static function image($image, $width = NULL, $prefix = NULL, $http = TRUE)
    {
        if (preg_match('/^https?:\/\/.*/', $image))
        {
            return $image;
        }
        elseif(empty($image))
        {
            return URL::site('images/nopic.gif');
        }

        preg_match('/^([a-z0-9]{32})\.([a-z]{3,4})$/i', $image, $matches);

        if (count($matches) == 3) // md5 图片
        {
            list($filename, $md5, $ext) = $matches;
            $local = 0;
            $image = '';
            for ($i = 0; $i < Upload_Md5::$level; $i++)
            {
                $image .= '/'.substr($md5, $local, 2);
                $local += 2;
                if ($local > 30) break; // 文件名长度不足
            }
            $image .= '/'.$filename;
        }

        $prefix AND $image = '/'.$prefix.$image;
        $ext = strtolower(substr(strrchr($image, '.'), 1));
        if ($width != NULL)
        {
            $image = 'thumb/'.dirname($image).'/'.basename($image, $ext).$width.'.'.$ext;
        }

        $image = preg_replace('/[\\\\\/]+/', '/', $image);

        return $http ? URL::resource($image) : $image;
    }

    /**
     * 获取当前的 URL + QueryString ( $_SERVER['REQUEST_URI'] )
     *
     * @return string
     */
    public static function current()
    {
        return Request::$initial->url().URL::query();
    }

    /**
     * 获取当前主机名
     *
     * @return string
     */
    public static function host()
    {
        if (isset($_SERVER['HTTP_HOST']))
        {
            return strtolower($_SERVER['HTTP_HOST']);
        }

        if (isset($_SERVER['HTTP_X_FORWARDED_HOST']))
        {
            return strtolower($_SERVER['HTTP_X_FORWARDED_HOST']);
        }

        return NULL;
    }

    /**
     * 获取当前 HTTP 协议
     *
     * @return string
     */
    public static function scheme()
    {
        return (strpos($_SERVER['SERVER_PROTOCOL'], 'HTTPS') === FALSE) ? 'http' : 'https';
    }

    /**
     * 设置附加重定向地址
     *
     * @param  string  $url
     * @param  string  $redirect
     * @return string
     */
    public static function redirect($url, $redirect = NULL)
    {
        if ($url[0] != '/')
        {
            $url = URL::site($url);
        }

        if (empty($redirect))
        {
            $redirect = URL::current();
        }

        // 如果路径相同，不做重定向跳转
        $parse1 = parse_url($redirect);
        $parse2 = parse_url($url);

        if (isset($parse1['path']) AND isset($parse2['path']) AND $parse1['path'] == $parse2['path'])
        {
            return $url;
        }

        return Helper::factory('redirect')->url($url, $redirect);
    }

}